import java.util.Arrays;

/**
 * 706. 设计哈希映射
 * https://leetcode-cn.com/problems/design-hashmap/
 */
public class Solutions_706 {
    public static void main(String[] args) {
        MyHashMap myHashMap = new MyHashMap();
        myHashMap.put(1, 1);
        myHashMap.put(2, 2);
        int res1 = myHashMap.get(1);  // output: 1
        System.out.println(res1);
        int res2 = myHashMap.get(3);  // output: -1
        myHashMap.put(2, 1);
        System.out.println(res2);
        int res3 = myHashMap.get(2);  // output: 1
        myHashMap.remove(2);
        System.out.println(res3);
        int res4 = myHashMap.get(2);  // output: -1
        System.out.println(res4);
    }
}

/**
 * 优化项：
 * 1.引入扩容机制（避免空间浪费）
 * 2.put 时，将 value + 1，get 时，将 value - 1
 *   map[i] = 0，说明键 i 不存在
 *   省却 Arrays.fill(map, -1) 的操作
 */
class MyHashMap {
    int[] map;

    public MyHashMap() {
        map = new int[100];
    }

    public void put(int key, int value) {
        if (key >= map.length) {
            // 扩容
            enlargeSize(key);
        }
        map[key] = value + 1;
    }

    public int get(int key) {
        if (key >= map.length) {
            return -1;
        }
        if (map[key] == 0) {
            return -1;
        }
        return map[key] - 1;
    }

    public void remove(int key) {
        if (key >= map.length) {
            return;
        }
        map[key] = 0;
    }

    /**
     * map 数组扩容到 size 个长度
     */
    public void enlargeSize(int size) {
        map = Arrays.copyOf(map, size + 1);
    }
}

